# -*- codeing = utf-8 -*-
# @Time : 2024/7/22 16:01
# @Author : 袁美玉
# @File : testBs4.py
# @Software  ：PyCharm

"""
  测试文档解析
  BeautifulSoup4将复杂html文档转换成一个复杂的树形结构，每一个节点都是python对象，所有对应可以归纳为四种：
    -Tag
    -NavigableString
"""
import re

from bs4 import BeautifulSoup

file = open("./login.html","rb") # 以二进制方式读取
html = file.read()
# 解析html文档,解析成树结构
bs = BeautifulSoup(html, "html.parser")
# print(bs.title)
# print(bs.head)
# print(type(bs.head))  # <class 'bs4.element.Tag'>
# 1,Tag 打印 标签及其内容，拿到它所找到的第一个内容

# print(bs.title.string)  #  （Flask HTTP请求方法处理 ） 只打印内容，没有标签
# print(type(bs.title.string)) # <class 'bs4.element.NavigableString'>
# 2.NavigableString 标签里的内容 （字符串）
# print(bs.head.attrs) # 获取标签里面的属性

# 3. BeautifulSoup 表示整个文档
# print(type(bs)) # <class 'bs4.BeautifulSoup'>

# print(bs.name)

# print(bs)

# 4.Comment 是一个特殊的NavigableString， 输出的内容不包含注释符号

#---------------------
'''
应用
'''

# 文档的遍历
# tag的.content 属性可以将tag的子节点以列表的方式输出
# print(bs.head.contents)
# print(bs.head.contents[1])

# 文档的搜索
# 1.find_all(),查找和字符串完全匹配的内容
# t_list = bs.find_all("p")

# 2，正则表达搜索：只要标签里含有a就可以
# t_list = bs.find_all(re.compile("a"))

# 方法：传入一个函数（方法），根据函数的要求搜索
# def name_is_exists(tag):
#     return tag.has_attr("name")
#
# t_list = bs.find_all(name_is_exists)

# 2.  kwargs 参数
# t_list = bs.find_all(content="例子")

# 3. text参数
# t_list = bs.find_all(text=re.compile("\d"))

# 4.limit参数
# t_list = bs.find_all("p",limit=2)


# css 选择器
# t_list = bs.select('title') # 通过标签查找
t_list = bs.select(".mnav")



for item in t_list:
    print(item)